package net.confinanz.client.data;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import net.confinanz.client.controller.Controller;
import net.confinanz.client.exceptions.NotConnectedException;

public class Betreuer implements Serializable {

	private static final long serialVersionUID = 8249635485793051718L;
	
	private static final String SELECT 			= "SELECT * FROM `meta_betreuer` ";
	private static final String INSERT 			= "INSERT INTO `confinanz`.`meta_betreuer` (`betreuer_bezeichner`) VALUES (";
	private static final String UPDATE 			= "UPDATE `meta_betreuer` SET ";
	
	private String id;
	private String bezeichner;

	public Betreuer() {
		setId("");
		setBezeichner("");
	}

	public Betreuer(String id, Controller controller) throws SQLException, NotConnectedException {
		setId(id);
		fromDatabase(controller);
	}


//	##### Instanz Methoden #####
	
	public String getId() {
		return id;
	}

	private void setId(String id) {
		this.id = id;
	}
	
	public void setBezeichner(String bezeichner) {
		this.bezeichner = bezeichner;
	}
	
	public String getBezeichner() {
		return this.bezeichner;
	}

	public String toStringExtended() {
		return (this.id + " : " + this.bezeichner);
	}
	
	public String toStringDatabase() {
		return toStringExtended();
	}
	

//	##### Datenbank Methoden #####
	
	public void fromDatabase(Controller controller) throws SQLException, NotConnectedException {
		String sql = SELECT + "WHERE `betreuer_id` = " + getId();
		controller.logMessage("SQL-QUERY: " + sql);
		ResultSet result = controller.getConnector().select(sql);
		
		if (result.first()) {
			setBezeichner(result.getString("betreuer_bezeichner"));
			
			controller.logMessage("RESULT: " + toStringDatabase());
		} else throw new SQLException("There is no dataset with `betreuer_id` = " + getId() + " in table `meta_betreuer`.");
	}
	
	public void toDatabase(Controller controller) throws SQLException, NotConnectedException {
		String sql;
		if (getId().equals("")) {
			sql = INSERT + "'" + getBezeichner()
					+ "')";
			
			controller.logMessage("SQL-QUERY: " + sql);
			controller.getConnector().insert(sql);
	
			sql = Controller.INSERT_ID;
			controller.logMessage("SQL-QUERY: " + sql);
			ResultSet result = controller.getConnector().select(sql);
			
			if (result.first()) {
				setId(result.getString("id"));
			}
			controller.logMessage("RESULT: " + toStringDatabase());
		} else {
			sql = UPDATE + "`bereich_bezeichner` = '" + getBezeichner()
					+ "' WHERE `betreuer_id` = " + getId();
			
			controller.logMessage("SQL-QUERY: " + sql);
			controller.getConnector().insert(sql);
			controller.logMessage("RESULT: " + toStringDatabase());
		}
	}


//	##### Override Methoden #####
	
	@Override
	public String toString() {
		return this.bezeichner;
	}
	
	@Override
	public boolean equals(Object object) {
		return ((object instanceof Betreuer) && (((Betreuer) object)).getId().equals(this.getId()));
	}
}
